import Vue from 'vue'
import VueRouter from 'vue-router'
// 导入store
import Store from '@/store'
// 导入接口
import { auInfo } from '@/api/my.js'
// 按需导入getToken
import { getToken } from '@/utils/token.js'
Vue.use(VueRouter)

const routes = [
  {
    path: '/',
    alias: '/login',
    component: () => import('@/views/login/login.vue')
  },
  {
    path: '/home',
    redirect: '/home/my', // 重定向到我的
    component: () => import('@/views/home/home.vue'),
    children: [
      {
        path: 'company', //  写/相当于完整路由,不写(company=>/home/company),它是相对的,相对于home
        component: () => import('@/views/home/company/company.vue'),
        meta: { needNav: true }
      },
      {
        path: 'find',
        component: () => import('@/views/home/find/find.vue'),
        meta: { needNav: true }
      },
      {
        path: '/home/my',
        component: () => import('@/views/home/my/my.vue'),
        meta: { needLogin: true, needNav: true } // needLogin需要登录才能访问的页面
      },
      {
        path: 'question',
        component: () => import('@/views/home/question/question.vue'),
        meta: { needLogin: true, needNav: true } // needNav:true是否显示底部菜单
      },
      {
        path: 'myInfo',
        component: () => import('@/views/home/my/myInfo.vue'),
        meta: { needLogin: true }
      },
      {
        path: 'editInfo',
        component: () => import('@/views/home/my/editInfo.vue'),
        meta: { needLogin: true }
      },
      {
        path: 'shareList',
        component: () => import('@/views/home/find/shareList.vue'),
        meta: {}
      },
      {
        path: 'shareInfo/:id?', // 配置动态路由
        component: () => import('@/views/home/find/shareInfo.vue'),
        meta: {}
      },
      {
        path: 'questionInto',
        component: () => import('@/views/home/question/questionInto.vue'),
        meta: { needLogin: true } // needNav:true是否显示底部菜单
      }
    ]
  }
]

const router = new VueRouter({
  routes
})
// 有的页面登陆需要token,有的页面不需要
router.beforeEach((to, from, next) => {
  console.log(to)

  // 记录滚动条信息
  const _top =
    document.documentElement.scrollTop ||
    window.pageYOffset ||
    document.body.scrollTop

  from.meta.scrollTop = _top
  console.log('位置', from.meta.scrollTop)
  if (to.meta.needLogin) {
    // 调用取消方法并全局取消所有接口
    try {
      window.cancelEvent('', true)
    } catch (err) {
      console.log(err)
    }
    if (Store.state.isLogin) {
      // console.log(44)
      // 判断是否登陆,登陆过,因为有的页面是不需要token的
      next()
    } else {
      // 判断是否有token有发送请求
      if (getToken()) {
        auInfo()
          .then(res => {
            Store.commit('setUserInfo', res.data.data)
            Store.commit('setIsLogin', true)
            next()
          })
          .catch(err => {
            console.log(err)
          })
      } else {
        // fullpath 带参数
        // path不带参数
        // 没有token回到首页,可以直接回到带参数的网址,但是还有更好的方法,就是通过window.location.href获取当前网址在拼接后面的参数
        // 在导航守卫没有token时跳转至登录页时通过路由传参想去的fullPath
        // next('/login?redirect=' + to.fullPath)

        next('/login?redirect=' + window.location.href.split('#')[1])
      }
    }
  } else {
    // 判断不需要登陆的页面,我们要偷偷登陆,有token并且登陆状态是false,token过期我们不做处理
    next()
    if (getToken() && !Store.state.isLogin) {
      auInfo(true)
        .then(res => {
          Store.commit('setUserInfo', res.data.data)
          Store.commit('setIsLogin', true)
        })
        .catch(err => {
          console.log(err)
        })
    }
  }
})

// 后置导航
router.afterEach((to, from) => {
  window.scrollTo(0, 0)
})
// 解决路由错误的,百度
// const originalPush = VueRouter.prototype.push

// VueRouter.prototype.push = function push (location) {
//   return originalPush.call(this, location).catch(err => err)
// }
export default router
// 前置守卫
